texture: Add GdkMemoryConversion private enum
authorBenjamin Otte <otte@redhat.com>
Thu, 9 Sep 2021 00:05:08 +0000 (02:05 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 12 Sep 2021 03:22:21 +0000 (05:22 +0200)
Now gdk_memory_convert() converts to one of these conversions instead of
re(ab)using parts of the GdkMemoryFormat enum.

gdk/gdkglcontext.c
gdk/gdkmemorytexture.c
gdk/gdkmemorytextureprivate.h
gdk/gdktexture.c
gsk/ngl/gsknglglyphlibrary.c
gsk/ngl/gskngliconlibrary.c

index 522cbcecf6dbdbbae5e073a4d70780e56d5eb12f..3357562add5c5146dbde6aaef368fdd2241d6d8f 100644 (file)
@@ -243,7 +243,7 @@ gdk_gl_context_upload_texture (GdkGLContext    *context,
         {
           copy = g_malloc (width * height * 4);
           gdk_memory_convert (copy, width * 4,
-                              GDK_MEMORY_R8G8B8A8_PREMULTIPLIED,
+                              GDK_MEMORY_CONVERT_GLES_RGBA,
                               data, stride, data_format,
                               width, height);
           stride = width * 4;
@@ -282,7 +282,7 @@ gdk_gl_context_upload_texture (GdkGLContext    *context,
         {
           copy = g_malloc (width * height * 4);
           gdk_memory_convert (copy, width * 4,
-                              GDK_MEMORY_DEFAULT,
+                              GDK_MEMORY_CONVERT_DOWNLOAD,
                               data, stride, data_format,
                               width, height);
           stride = width * 4;
index a8d8bbd834c625eb83ce5a7857c070f89c6ebd48..ab117a01ff9c6b4f6c7d604f758617148060ac69 100644 (file)
@@ -87,7 +87,7 @@ gdk_memory_texture_download (GdkTexture *texture,
   GdkMemoryTexture *self = GDK_MEMORY_TEXTURE (texture);
 
   gdk_memory_convert (data, stride,
-                      GDK_MEMORY_CAIRO_FORMAT_ARGB32,
+                      GDK_MEMORY_CONVERT_DOWNLOAD,
                       (guchar *) g_bytes_get_data (self->bytes, NULL),
                       self->stride,
                       self->format,
@@ -288,7 +288,7 @@ typedef void (* ConversionFunc) (guchar       *dest_data,
                                  gsize         width,
                                  gsize         height);
 
-static ConversionFunc converters[GDK_MEMORY_N_FORMATS][3] =
+static ConversionFunc converters[GDK_MEMORY_N_FORMATS][GDK_MEMORY_N_CONVERSIONS] =
 {
   { convert_memcpy, convert_swizzle3210, convert_swizzle2103 },
   { convert_swizzle3210, convert_memcpy, convert_swizzle3012 },
@@ -302,14 +302,14 @@ static ConversionFunc converters[GDK_MEMORY_N_FORMATS][3] =
 };
 
 void
-gdk_memory_convert (guchar          *dest_data,
-                    gsize            dest_stride,
-                    GdkMemoryFormat  dest_format,
-                    const guchar    *src_data,
-                    gsize            src_stride,
-                    GdkMemoryFormat  src_format,
-                    gsize            width,
-                    gsize            height)
+gdk_memory_convert (guchar              *dest_data,
+                    gsize                dest_stride,
+                    GdkMemoryConversion  dest_format,
+                    const guchar        *src_data,
+                    gsize                src_stride,
+                    GdkMemoryFormat      src_format,
+                    gsize                width,
+                    gsize                height)
 {
   g_assert (dest_format < 3);
   g_assert (src_format < GDK_MEMORY_N_FORMATS);
index 740a59da6e6beba00c6b406be690f76a3584d0bb..a450a9a139c2aa7bdec572ac46f0a4a4dff49ab5 100644 (file)
@@ -29,7 +29,21 @@ G_BEGIN_DECLS
 #define GDK_MEMORY_GDK_PIXBUF_OPAQUE GDK_MEMORY_R8G8B8
 #define GDK_MEMORY_GDK_PIXBUF_ALPHA GDK_MEMORY_R8G8B8A8
 
-#define GDK_MEMORY_CAIRO_FORMAT_ARGB32 GDK_MEMORY_DEFAULT
+typedef enum {
+  GDK_MEMORY_CONVERT_DOWNLOAD_LITTLE_ENDIAN,
+  GDK_MEMORY_CONVERT_DOWNLOAD_BIT_ENDIAN,
+  GDK_MEMORY_CONVERT_GLES_RGBA,
+
+  GDK_MEMORY_N_CONVERSIONS
+} GdkMemoryConversion;
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GDK_MEMORY_CONVERT_DOWNLOAD GDK_MEMORY_CONVERT_DOWNLOAD_LITTLE_ENDIAN
+#elif G_BYTE_ORDER == G_BIG_ENDIAN
+#define GDK_MEMORY_CONVERT_DOWNLOAD GDK_MEMORY_CONVERT_DOWNLOAD_BIG_ENDIAN
+#else
+#error "Unknown byte order for GDK_MEMORY_CONVERT_DOWNLOAD"
+#endif
 
 gsize                   gdk_memory_format_bytes_per_pixel   (GdkMemoryFormat    format);
 
@@ -37,14 +51,14 @@ GdkMemoryFormat         gdk_memory_texture_get_format       (GdkMemoryTexture  *
 const guchar *          gdk_memory_texture_get_data         (GdkMemoryTexture  *self);
 gsize                   gdk_memory_texture_get_stride       (GdkMemoryTexture  *self);
 
-void                    gdk_memory_convert                  (guchar            *dest_data,
-                                                             gsize              dest_stride,
-                                                             GdkMemoryFormat    dest_format,
-                                                             const guchar      *src_data,
-                                                             gsize              src_stride,
-                                                             GdkMemoryFormat    src_format,
-                                                             gsize              width,
-                                                             gsize              height);
+void                    gdk_memory_convert                  (guchar                     *dest_data,
+                                                             gsize                       dest_stride,
+                                                             GdkMemoryConversion         dest_format,
+                                                             const guchar               *src_data,
+                                                             gsize                       src_stride,
+                                                             GdkMemoryFormat             src_format,
+                                                             gsize                       width,
+                                                             gsize                       height);
 
 
 G_END_DECLS
index 1f262909e0bd6297da6a81ae2531a237a1a65ae0..9ae9f80944f475c8e35522eb822948c3878583f4 100644 (file)
@@ -262,7 +262,7 @@ gdk_texture_new_for_surface (cairo_surface_t *surface)
   
   texture = gdk_memory_texture_new (cairo_image_surface_get_width (surface),
                                     cairo_image_surface_get_height (surface),
-                                    GDK_MEMORY_CAIRO_FORMAT_ARGB32,
+                                    GDK_MEMORY_DEFAULT,
                                     bytes,
                                     cairo_image_surface_get_stride (surface));
 
index 9f269d8643d5aac4a8bd318f55d6ef9ae5a96bb7..8ddf1ab265fc1e7eb8c7dba70f311546ca641508 100644 (file)
@@ -235,7 +235,7 @@ gsk_ngl_glyph_library_upload_glyph (GskNglGlyphLibrary     *self,
       pixel_data = free_data = g_malloc (width * height * 4);
       gdk_memory_convert (pixel_data,
                           width * 4,
-                          GDK_MEMORY_R8G8B8A8_PREMULTIPLIED,
+                          GDK_MEMORY_CONVERT_GLES_RGBA,
                           cairo_image_surface_get_data (surface),
                           width * 4,
                           GDK_MEMORY_DEFAULT,
index 977c20105144d7169c9ee476b6e718ee90d27e0e..ab4d1b4d6ffe83d4e28b752492e1ecbf7e66c902 100644 (file)
@@ -115,7 +115,7 @@ gsk_ngl_icon_library_add (GskNglIconLibrary     *self,
     {
       pixel_data = free_data = g_malloc (width * height * 4);
       gdk_memory_convert (pixel_data, width * 4,
-                          GDK_MEMORY_R8G8B8A8_PREMULTIPLIED,
+                          GDK_MEMORY_CONVERT_GLES_RGBA,
                           surface_data, cairo_image_surface_get_stride (surface),
                           GDK_MEMORY_DEFAULT, width, height);
       gl_format = GL_RGBA;